<html>
<head>
  <title>04常用操作</title>
  <basefont face="微软雅黑" size="2" />
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="exporter-version" content="Evernote Windows/307027 (zh-CN, DDL); Windows/6.1.0 (Win32);"/>
  <style>
    body, td {
      font-family: 微软雅黑;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<a name="668"/>
<h1>04常用操作</h1>

<div>
<span><div><span style="color: rgb(28, 51, 135);"><b><span style="font-size: 19px;">把图片集转化为数组：</span></b></span></div><div><b><span style="font-size: 19px;"><span style="color: rgb(28, 51, 135);">tqdm module；</span></span></b></div><div><br/></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;-en-codeblock:true;"><div><div>def create_train_data():</div><div>    training_data = []</div><div>    for img in <span style="color: rgb(227, 0, 0);"><b>tqdm(os.listdir(TRAIN_DIR))</b></span>:</div><div>        label = label_img(img)</div><div>        path = os.path.join(TRAIN_DIR,img)</div><div>        img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)</div><div>        img = cv2.resize(img, (IMG_SIZE,IMG_SIZE))</div><div>        training_data.append([np.array(img),np.array(label)])</div><div>    shuffle(training_data)</div><div>    np.save('train_data.npy', training_data)</div>
    return training_data</div></div><div><font color="#1C3387"><span style="font-size: 19px;"><b>pip install</b></span></font></div><div><br/></div><div>建议非清华大学校内的使用这个镜像： http://e.pypi.<a href="http://lib.csdn.net/base/python" style="color:#df3434; font-weight:bold;" target="_blank" title="Python知识库">Python</a>.org/simple(这也是一个http://pypi.v2ex.com/simple)，清华校内的就使用这个：<span style="color:rgb(68,68,68); font-family:'Microsoft Yahei',Tahoma,Arial,Helvetica,STHeiti; font-size:14px;">http://mirrors.tuna.tsinghua.edu.cn/pypi/simple</span></div><div><br/></div><div><br/></div><div><span style="color: rgb(28, 51, 135);"><b><span style="font-size: 21px;"><span style="font-family: 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti;">路径相关操作</span></span></b></span></div><div><p>总是记不住API。昨晚写的时候用到了这些，但是没记住，于是就索性整理一下吧：</p><p><strong>python中对文件、文件夹</strong><strong>（文件操作函数）</strong><strong>的操作需要涉及到os模块和shutil模块。</strong></p><p>得到当前工作目录，即当前Python脚本工作的目录路径: <strong>os.getcwd()</strong></p><p>返回指定目录下的所有文件和目录名:<strong>os.listdir()</strong></p><p>函数用来删除一个文件:<strong>os.remove()</strong></p><p>删除多个目录：<strong>os.removedirs（r“c：\python”）</strong></p><p>检验给出的路径是否是一个文件：<strong>os.path.isfile()</strong></p><p>检验给出的路径是否是一个目录：<strong>os.path.isdir()</strong></p><p>判断是否是绝对路径：<strong>os.path.isabs()</strong></p><p>检验给出的路径是否真地存:<strong>os.path.exists()</strong></p><div>返回一个路径的目录名和文件名:<strong>os.path.split()  </strong>   eg os.path.split('/home/swaroop/byte/code/poem.txt') 结果：('/home/swaroop/byte/code', 'poem.txt') </div><p>分离扩展名：<strong>os.path.splitext()</strong></p><p>获取路径名：<strong>os.path.dirname()</strong></p><p>获取文件名：<strong>os.path.basename()</strong></p><p>运行shell命令: <strong>os.system()</strong></p><p>读取和设置环境变量:<strong>os.getenv() 与os.putenv()</strong></p><p>给出当前平台使用的行终止符:<strong>os.linesep    </strong>Windows使用'\r\n'，Linux使用'\n'而Mac使用'\r'</p><p>指示你正在使用的平台：<strong>os.name </strong>      对于Windows，它是'nt'，而对于Linux/Unix用户，它是'posix'</p><p>重命名：<strong>os.rename（old， new）</strong></p><p>创建多级目录：<strong>os.makedirs（r“c：\python\test”）</strong></p><p>创建单个目录：<strong>os.mkdir（“test”）</strong></p><p>获取文件属性：<strong>os.stat（file）</strong></p><p>修改文件权限与时间戳：<strong>os.chmod（file）</strong></p><p>终止当前进程：<strong>os.exit（）</strong></p><p>获取文件大小：<strong>os.path.getsize（filename）</strong></p><div><br/></div><div><strong>文件操作：</strong></div><div><strong>os.mknod(&quot;test.txt&quot;) </strong>       创建空文件</div><strong>fp = open(&quot;test.txt&quot;,w)  </strong>   直接打开一个文件，如果文件不存在则创建文件
<p>关于open 模式：</p><div>w     以写方式打开，</div><div>a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)</div><div>r+     以读写模式打开</div><div>w+     以读写模式打开 (参见 w )</div><div>a+     以读写模式打开 (参见 a )</div><div>rb     以二进制读模式打开</div><div>wb     以二进制写模式打开 (参见 w )</div><div>ab     以二进制追加模式打开 (参见 a )</div><div>rb+    以二进制读写模式打开 (参见 r+ )</div><div>wb+    以二进制读写模式打开 (参见 w+ )</div>
ab+    以二进制读写模式打开 (参见 a+ )
<p> </p><p><strong>fp.read([size])  </strong>                   #size为读取的长度，以byte为单位</p><p><strong>fp.readline([size])  </strong>               #读一行，如果定义了size，有可能返回的只是一行的一部分</p><p><strong>fp.readlines([size])   </strong>             #把文件每一行作为一个list的一个成员，并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数，size是表示读取内容的总长，也就是说可能只读到文件的一部分。</p><p><strong>fp.write(str)  <em> </em></strong>                   #把str写到文件中，write()并不会在str后加上一个换行符</p><p><strong>fp.writelines(seq)    </strong>        #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入，不会在每行后面加上任何东西。</p><p><strong>fp.close()   </strong>                     #关闭文件。python会在一个文件不用后自动关闭文件，不过这一功能没有保证，最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError</p><p><strong>fp.flush()   </strong>                                   #把缓冲区的内容写入硬盘</p><p><strong>fp.fileno()    </strong>                                  #返回一个长整型的”文件标签“</p><p><strong>fp.isatty()    </strong>                                  #文件是否是一个终端设备文件（unix系统中的）</p><p><strong>fp.tell()</strong>                                         #返回文件操作标记的当前位置，以文件的开头为原点</p><p><strong>fp.next()    </strong>                                   #返回下一行，并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时，就是调用next()函数来实现遍历的。</p><p><strong>fp.seek(offset[,whence])  </strong>            #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的，一般为正数。但如果提供了whence参数就不一定了，whence可以为0表示从头开始计算，1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意，如果文件以a或a+的模式打开，每次进行写操作时，文件操作标记会自动返回到文件末尾。</p><p><strong>fp.truncate([size])   </strong>                    #把文件裁成规定的大小，默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大，依据系统的不同可能是不改变文件，也可能是用0把文件补到相应的大小，也可能是以一些随机的内容加上去。</p><p> </p><div><strong>目录操作：</strong></div><div><strong>os.mkdir(&quot;file&quot;)     </strong>              创建目录</div><div>复制文件：</div><div><strong>shutil.copyfile(&quot;oldfile&quot;,&quot;newfile&quot;) </strong>      oldfile和newfile都只能是文件</div><div><strong>shutil.copy(&quot;oldfile&quot;,&quot;newfile&quot;)   </strong>         oldfile只能是文件夹，newfile可以是文件，也可以是目标目录</div><div>复制文件夹：</div><div><strong>shutil.copytree(&quot;olddir&quot;,&quot;newdir&quot;) </strong>       olddir和newdir都只能是目录，且newdir必须不存在</div><div>重命名文件（目录）</div><div><strong>os.rename(&quot;oldname&quot;,&quot;newname&quot;) </strong>      文件或目录都是使用这条命令</div><div>移动文件（目录）</div><div><strong>shutil.move(&quot;oldpos&quot;,&quot;newpos&quot;)   </strong></div><div>删除文件</div><div><strong>os.remove(&quot;file&quot;)</strong></div><div>删除目录</div><div><strong>os.rmdir(&quot;dir&quot;)</strong>只能删除空目录</div><div><strong>shutil.rmtree(&quot;dir&quot;)  </strong>  空目录、有内容的目录都可以删</div><div>转换目录</div><strong>os.chdir(&quot;path&quot;)   </strong>换路径
<p> </p><p><strong>相关例子 </strong></p><p><strong> 1 </strong>将文件夹下所有图片名称加上'_fc'</p><p><strong><em>python代码:</em></strong></p><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;-en-codeblock:true;"><div># -*- coding:utf-8 -*-</div><div>import re</div><div>import os</div><div>import time</div><div>#str.split(string)分割字符串</div><div>#'连接符'.join(list) 将列表组成字符串</div><div>def change_name(path):</div><div>    global i</div><div>    if not os.path.isdir(path) and not os.path.isfile(path):</div><div>        return False</div><div>    if os.path.isfile(path):</div><div>        file_path = os.path.split(path) #分割出目录与文件</div><div>        lists = file_path[1].split('.') #分割出文件与文件扩展名</div><div>        file_ext = lists[-1] #取出后缀名(列表切片操作)</div><div>        img_ext = ['bmp','jpeg','gif','psd','png','jpg']</div><div>        if file_ext in img_ext:</div><div>            os.rename(path,file_path[0]+'/'+lists[0]+'_fc.'+file_ext)</div><div>            i+=1 #注意这里的i是一个陷阱</div><div>        #或者</div><div>        #img_ext = 'bmp|jpeg|gif|psd|png|jpg'</div><div>        #if file_ext in img_ext:</div><div>        #    print('ok---'+file_ext)</div><div>    elif os.path.isdir(path):</div><div>        for x in os.listdir(path):</div><div>            change_name(os.path.join(path,x)) #os.path.join()在路径处理上很有用</div><div><br/></div><div>img_dir = 'D:\\xx\\xx\\images'</div><div>img_dir = img_dir.replace('\\','/')</div><div>start = time.time()</div><div>i = 0</div><div>change_name(img_dir)</div><div>c = time.time() - start</div><div>print('程序运行耗时:%0.2f'%(c))</div><div>print('总共处理了 %s 张图片'%(i))</div><div>输出结果：</div><div><br/></div><div>程序运行耗时:0.11</div><div>总共处理了 109 张图片</div><div><br/></div><div><br/></div></div></div><div><br/></div></span>
</div></body></html> 